1. Field of the Invention
The present invention relates, in general, to software application management, and, more particularly, to software, systems and methods for efficiently deploying software application services by providing application retrieval agents within a defined portion of a network topology.
2. Relevant Background
Application software generally refers to a collection of software mechanisms that implement a desired program behavior to manipulate data provided by a user and/or obtained from both internal and external data stores. A software application typically is implemented on top of an operating system (OS) that provides essential functionality for interfacing with computer system hardware and program interaction. A software application typically implements a user interface using devices such as keyboards, mice, microphones, monitors, and the like to communicate data with a user. Examples include word processors, anti-virus programs, spreadsheets, world-wide-web browsers, and the like.
Application software continues to become more complex and interrelated. As computer hardware becomes more powerful, less expensive, and more ubiquitous in electronic devices, application software that operates on this hardware becomes both more complex and more varied. Unlike hardware, however, software mechanisms tend to evolve rapidly to adapt to new environments and provide additional functionality. This leads to a situation in which installed software applications require, or at least benefit from, continued monitoring and maintenance by skilled software professionals familiar with the construction and mechanisms that make up the software. Although the problem is more pronounced in complex software applications such as security software, antivirus software, and the like, it remains a significant problem even for comparatively simple applications that must augment or modify behavior to remain competitive.
Coincidentally, software reliability is becoming more important. As people rely on software performance for more business and personal activities, the cost of software downtime and poor performance have become more significant. These costs are realized both in terms of money and lost time.
Historically, software applications have been distributed and maintained as if they were hard goods like the computers they operate on. However, unlike hardware, software""s greatest strength is in its ability to be readily modified and updated to meet the needs of new environments while the hardware remains unchanged. Traditional distribution involves embodying the application code onto a tangible media, packaging the media and physically distributing the media from a manufacturer to a client""s computer. The software is then installed on the client computer by storing copies of files on a hard disk and hooking the software application into the operating system during an installation procedure. Only after this complex distribution process occurs can the user launch the application code and use the behaviors and services implemented therein.
In this model of applications as goods, the installed software is intended to be fixed as if it were hardware. The application developer, if successful, continues to implement improvements that will be released to a user in subsequent patches, updates or versions. However, the user continues to use the originally released product until the new release becomes available at which time the entire distribution/installation process is repeated. This cycle hampers the effectiveness of software applications as it is impracticable to deploy incremental improvements except in extraordinary circumstances (e.g., the originally released product is materially defective). Also, the installation processes are notoriously difficult on many computer platforms and often require knowledge of software interactions, drivers, and hardware that are neither documented nor known to the installer.
Application providers have made many efforts to simplify the process of software application management. For example, many applications provide downloadable access to updates and patches. This eases distribution of updates and patches, but essentially places the burden of maintaining an application on the user. The user must determine when an update is required and then find, download, install, configure, and maintain the updated code. Curiously, it is the application provider that is often best positioned to perform some or all of these tasks.
Moreover, even simple patches and updates often involve transport and installation of large files, often in the multi-Megabyte size range. It is contemplated that file updates and patches will increase in size in the future. This makes downloadable access impractical for users with limited bandwidth connection to a download source. In particular, in a network where many users share Internet access, when an application update becomes available each user has a simultaneous need to download the product. In even small networks, the simultaneous download of large files may consume the available network bandwidth for many minutes or even for hours. If multiple software applications are continuously downloaded to remain current, a typical shared Internet connection may become entirely consumed by the download activity and unavailable for other productive work.
Currently the large download traffic also affects application software providers. Once an update is posted for distribution, the application provider hopes that requests for the updated code will arrive over a period of time. A large number of simultaneous requests cannot be served and may crash the network source computers. Hence, both consumers and providers of application software desire a more manageable system and method for deploying application code and updates to application code.
Many networks include caching machines coupled to store copies of data downloaded by any network node for future use by any other network node. Network caches provide a partial solution in that load on the application code supplier is reduced. However, proxy caches still require at least one node to originate a download.
Hence, a need exists for software, systems and methods to enhance software application deployment in a manner that lessens the burdens of application management with respect to the application users while providing superior management and control over the processes involved in providing application services. Moreover, there exists a need for an application deployment system and methodology that provides application services ubiquitously and continuously without forcing the application user to take action to make it work.
Briefly stated, the present invention involves a method of providing a set of desired application functions to a plurality of network-coupled computing appliances. A set of code resident on a network-connected application management server is identified that when executed in a network appliance provides the desired application functions. A first application management agent in a first of the network-coupled computing appliances and a second application management agent in a second of the network-coupled computing appliances are executed. The first application management agent repetitively checks for updates of the identified code. Updates of the identified code are downloaded from the application management server into the first network-coupled computing appliance as the updates become available. Updates of the identified code are downloaded from the first network-coupled computing device into the second network-coupled computing appliance.